/**
 * 
 */
package com.czmh.etc.onlinepubsys.services;

import com.alibaba.fastjson.JSONObject;
import com.czmh.etc.onlinepubsys.dto.*;
import com.czmh.etc.onlinepubsys.exceptions.EtcUserException;
import com.czmh.etc.onlinepubsys.json.JsonResult;
import com.czmh.etc.onlinepubsys.model.EtcApply;
import com.czmh.etc.onlinepubsys.model.EtcEcardcallbackpage;
import com.czmh.etc.onlinepubsys.model.EtcEcardresult;
import com.czmh.etc.onlinepubsys.model.EtcUser;
import com.czmh.etc.onlinepubsys.request.CheckExchangeNoRequest;
import com.czmh.etc.onlinepubsys.request.EtcEcardcheckinEditRequest;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.bean.result.WxMpUser;

/**
 * @描述：EtcUserInfoSevices
 * @author： Seven.
 * @创建日期：Jun 10, 2019 2:20:44 PM.
 * @版本：1.0.0
 */
public interface EtcUserInfoSevice {

    /**
     * 保存小程序用户信息
     * 
     * @param userInfoJSON     用户信息json对象
     * @return EtcUser         返回用户信息
     */
    EtcUser saveUserInfo(JSONObject userInfoJSON);

    /**
     * 根据手机号码获取用户信息
     * @param mobile
     * @return
     */
    EtcUser queryUserByMobile(String mobile);

    /**
     * 提交用户申请ETC资料
     *  @param user_id        用户id
     * @param apply           用户申请资料
     * @param idcard          用户身份证信息
     * @param vehiclelicense  用户车辆信息
     */
    EtcApply submitApplyInfo(String user_id, EtcApplyDto apply, EtcIdcardDto idcard, EtcVehiclelicenseDto vehiclelicense) throws EtcUserException;

    /**
     * 保存信用卡申办用户登记信息
     *
     * @param userId         用户id
     * @return               返回记录流水号
     */
    String saveEcardCheckin(String userId);

    /**
     * 保存交行申请信用卡成功回调页面参数
     *
     * @param etcEcardcallbackpage     页面回调参数实体
     * @param authorization            token
     */
    void saveEcardCallbackPageParam(EtcEcardcallbackpage etcEcardcallbackpage, String authorization);

    /**
     * 保存交行信用卡申请回调结果参数，更新申请表信用卡审批状态
     *
     * @param etcEcardresult           申请回调结果参数
     */
    void saveEcardNotifyParam(EtcEcardresult etcEcardresult);

    /**
     * 用户通过手机号登录
     * 
     * @param mobile                   用户手机号
     * @return
     */
    EtcUser loginByMobile(String mobile);

    /**
     * 绑定用户手机号
     * 
     * @param etcUser                 用户信息
     * @return
     */
    JsonResult bindMobile(com.czmh.etc.onlinepubsys.feign.newrun.entity.EtcUser etcUser);

    /**
     * 保存用户的登记信息
     * 
     * @param request
     * @return 
     */
    JsonResult saveEcardCheckin(EtcEcardcheckinEditRequest request);

    /**
     * 获取用户的信用卡登记信息
     * 
     * @param userId       用户id
     * @return
     */
    JsonResult getEcardCheckin(String userId);

    /**
     * 查询用户是否登记过对应类型信用卡的信息
     * @param userId           用户id
     * @param card_type        信用卡类型
     * @return
     */
    JsonResult checkcreditcard(String userId, Integer card_type);

    /**
     * 保存用户跳转信用卡填写页面的记录
     * 
     * @param userId           用户id
     * @param card_type        信用卡类型
     * @param ip 
     * @return
     */
    String saveEcardView(String userId, Integer card_type, String ip);

    /**
     * 检验获取现金兑换码
     * 
     * @param request
     * @return
     */
    JsonResult checkexchangeNo(CheckExchangeNoRequest request);

    /**
     * 核销登记消息
     * 
     * @param serialNum
     * @return
     */
    JsonResult updatexchangeNo(String serialNum);

    /**
     * 保存微信用户关注时初始化用户信息
     * 
     * @param wpMpUser       微信用户信息
     * @return
     */
    EtcUser saveWechatInfo(WxMpUser wpMpUser);

    /**
     * 微信授权保存用户信息
     * 
     * @param code          微信授权code
     * @return
     * @throws WxErrorException 
     */
    JsonResult saveUserInfoByCode(String code) throws WxErrorException;

    /**
     * 更新用户个人信息
     * 
     * @param userInfo      用户个人信息
     * @return
     */
    JsonResult updateUserInfo(UpdateUserInfo userInfo);

    /**
     * 获取用户信息
     * 
     * @param userid        用户id
     * @return
     */
    JsonResult users(String userid);

    EtcUser queryUserInfo(String userId);

    void updateUser(EtcUser etcUser);

    /**
     * 更改绑定的手机号
     * 
     * @param userid         用户id
     * @param mobile         手机号
     * @param validCode      验证码
     * @return
     */
    JsonResult updateMobile(String userid, String mobile, String validCode);


    void insert(EtcUser etcUser) ;
}
